const hasOwnProperty = Object.prototype.hasOwnProperty;

export function hasOwn(obj, prop) {
  return hasOwnProperty.call(obj, prop);
}

export function getClass(obj) {
  return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}

export function isArray(obj) {
  return Array.isArray ? Array.isArray(obj) : obj instanceof Array;
}

export function isPlainObject(obj) {
  return getClass(obj) === 'object';
}

// 命名转为驼峰格式
export function encodeCamelNameStyle(value) {
  return value.replace(/\-([a-z])/g, (matches, $1) => {
    return $1.toUpperCase();
  });
}
// 命名取消驼峰格式
export function decodeCamelNameStyle(value) {
  return value.replace(/([A-Z])/g, (matches, $1) => {
    return '-' + $1.toLowerCase();
  });
}

// 深拷贝
export function clone(from) {
  const to = {};
  for (let key in from) {
    // 暂时只处理 Object 类型
    if (isPlainObject(from[key])) {
      to[key] = clone(from[key]);
    } else {
      // TODO 可能还需要处理 Array 类型
      to[key] = from[key];
    }
  }
  return to;
}
